﻿
namespace RealidadeAumentada.Entidades
{
    public class ECoordenadas
    {
        public EPontoInteiro2D[] items;
        public int length;

        #region Construtor
        public ECoordenadas(int i_length)
        {
            this.items = EPontoInteiro2D.CriarArray(i_length);
            this.length = 0;
        }
        #endregion

        #region Seta a Linha das Coordenadas
        public bool SetaLinhaCoordenadas(int i_x0, int i_y0, int i_x1, int i_y1)
        {
            EPontoInteiro2D[] ptr = this.items;
            int dx = (i_x1 > i_x0) ? i_x1 - i_x0 : i_x0 - i_x1;
            int dy = (i_y1 > i_y0) ? i_y1 - i_y0 : i_y0 - i_y1;
            int sx = (i_x1 > i_x0) ? 1 : -1;
            int sy = (i_y1 > i_y0) ? 1 : -1;

            int idx = 0;
            if (dx >= dy)
            {
                if (dx >= ptr.Length)
                {
                    return false;
                }
                int E = -dx;
                for (int i = 0; i <= dx; i++)
                {
                    ptr[idx].x = i_x0;
                    ptr[idx].y = i_y0;
                    idx++;
                    i_x0 += sx;
                    E += 2 * dy;
                    if (E >= 0)
                    {
                        i_y0 += sy;
                        E -= 2 * dx;
                    }
                }
            }
            else
            {
                if (dy >= this.items.Length)
                {
                    return false;
                }
                int E = -dy;
                for (int i = 0; i <= dy; i++)
                {
                    ptr[idx].x = i_x0;
                    ptr[idx].y = i_y0;
                    idx++;
                    i_y0 += sy;
                    E += 2 * dx;
                    if (E >= 0)
                    {
                        i_x0 += sx;
                        E -= 2 * dy;
                    }
                }
            }
            this.length = idx;
            return true;
        }
        #endregion
    }
}
